package cn.itcast.bos.dao.user;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import cn.itcast.bos.domain.user.User;

public interface UserDao extends JpaRepository<User, String> {
	// public void updateUser(User user);
	// jpql 案例 一 无语句 按照特殊关键字 定义接口方法名称即可 自己映射 jpql 语句 spring - data 提供实现类完成查询
	public User findByUsernameAndPassword(String username, String password);

	// 案例二 采用jpa 提供命名查询 @NamedQuery 查询实体类上声明注解 方法名可以自定义
	// select u from User where username = ? and password = ? 实体类类名.方法名 命名查询名称
	public User login(String username, String password);

	// 案例三 使用@Query注解 方法名称 可以自定义 支持 JPQL语法
	// @Query("from User where username = ?1 and password = ?2")
	// public User login1(String username, String password);
	@Query(nativeQuery = true, value = "SELECT * FROM T_USER where USERNAME = ? AND PASSWORD = ?")
	public User login1(String username, String password);

	// 案例四 采用 占位符 完成查询参数传递 @Param 出现 指定占位符对应参数值
	@Query("from User where username = :username and password = :password")
	public User mylogin3(@Param("username") String username, @Param("password") String password);

	// 案例五 修改操作 根据用户名 修改密码 修改非主键全字段
	@Modifying
	@Query("update User set password  = ?2 where username  = ?1")
	public void updateUser(String name, String newpwd);

	@Query("from User where username = ?1")
	public User findUserByUsername(String username);

}
